<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GstAudio meta: GStreamer Base Plugins 1.0 Library Reference Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="GStreamer Base Plugins 1.0 Library Reference Manual">
<link rel="up" href="gstreamer-audio.html" title="Audio Library">
<link rel="prev" href="gst-plugins-base-libs-GstAudio.html" title="GstAudio">
<link rel="next" href="GstAudioAggregator.html" title="GstAudioAggregator">
<meta name="generator" content="GTK-Doc V1.28 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts">
<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
                  <a href="#gst-plugins-base-libs-GstAudio-meta.description" class="shortcut">Description</a></span>
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="gst-plugins-base-libs-GstAudio.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="GstAudioAggregator.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
<a name="gst-plugins-base-libs-GstAudio-meta"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-GstAudio-meta.top_of_page"></a>GstAudio meta</span></h2>
<p>GstAudio meta — Buffer metadata for audio downmix matrix handling</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
<a name="gst-plugins-base-libs-GstAudio-meta.functions"></a><h2>Functions</h2>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
</colgroup>
<tbody>
<tr>
<td class="function_type">
<a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioMeta" title="struct GstAudioMeta"><span class="returnvalue">GstAudioMeta</span></a> *
</td>
<td class="function_name">
<a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#gst-buffer-add-audio-meta" title="gst_buffer_add_audio_meta ()">gst_buffer_add_audio_meta</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
<td class="define_keyword">#define</td>
<td class="function_name">
<a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#gst-buffer-get-audio-meta" title="gst_buffer_get_audio_meta()">gst_buffer_get_audio_meta</a><span class="c_punctuation">()</span>
</td>
</tr>
<tr>
<td class="function_type">
<a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioDownmixMeta" title="struct GstAudioDownmixMeta"><span class="returnvalue">GstAudioDownmixMeta</span></a> *
</td>
<td class="function_name">
<a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#gst-buffer-add-audio-downmix-meta" title="gst_buffer_add_audio_downmix_meta ()">gst_buffer_add_audio_downmix_meta</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
<td class="define_keyword">#define</td>
<td class="function_name">
<a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#gst-buffer-get-audio-downmix-meta" title="gst_buffer_get_audio_downmix_meta()">gst_buffer_get_audio_downmix_meta</a><span class="c_punctuation">()</span>
</td>
</tr>
<tr>
<td class="function_type">
<a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioDownmixMeta" title="struct GstAudioDownmixMeta"><span class="returnvalue">GstAudioDownmixMeta</span></a> *
</td>
<td class="function_name">
<a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#gst-buffer-get-audio-downmix-meta-for-channels" title="gst_buffer_get_audio_downmix_meta_for_channels ()">gst_buffer_get_audio_downmix_meta_for_channels</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
<td class="function_type">
<a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioClippingMeta" title="struct GstAudioClippingMeta"><span class="returnvalue">GstAudioClippingMeta</span></a> *
</td>
<td class="function_name">
<a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#gst-buffer-add-audio-clipping-meta" title="gst_buffer_add_audio_clipping_meta ()">gst_buffer_add_audio_clipping_meta</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
<td class="define_keyword">#define</td>
<td class="function_name">
<a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#gst-buffer-get-audio-clipping-meta" title="gst_buffer_get_audio_clipping_meta()">gst_buffer_get_audio_clipping_meta</a><span class="c_punctuation">()</span>
</td>
</tr>
</tbody>
</table></div>
</div>
<div class="refsect1">
<a name="gst-plugins-base-libs-GstAudio-meta.other"></a><h2>Types and Values</h2>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
</colgroup>
<tbody>
<tr>
<td class="datatype_keyword">struct</td>
<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioMeta" title="struct GstAudioMeta">GstAudioMeta</a></td>
</tr>
<tr>
<td class="datatype_keyword">struct</td>
<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioDownmixMeta" title="struct GstAudioDownmixMeta">GstAudioDownmixMeta</a></td>
</tr>
<tr>
<td class="datatype_keyword">struct</td>
<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioClippingMeta" title="struct GstAudioClippingMeta">GstAudioClippingMeta</a></td>
</tr>
</tbody>
</table></div>
</div>
<div class="refsect1">
<a name="gst-plugins-base-libs-GstAudio-meta.includes"></a><h2>Includes</h2>
<pre class="synopsis">#include &lt;gst/audio/audio.h&gt;
</pre>
</div>
<div class="refsect1">
<a name="gst-plugins-base-libs-GstAudio-meta.description"></a><h2>Description</h2>
<p><a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioDownmixMeta" title="struct GstAudioDownmixMeta"><span class="type">GstAudioDownmixMeta</span></a> defines an audio downmix matrix to be send along with
audio buffers. These functions in this module help to create and attach the
meta as well as extracting it.</p>
</div>
<div class="refsect1">
<a name="gst-plugins-base-libs-GstAudio-meta.functions_details"></a><h2>Functions</h2>
<div class="refsect2">
<a name="gst-buffer-add-audio-meta"></a><h3>gst_buffer_add_audio_meta ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioMeta" title="struct GstAudioMeta"><span class="returnvalue">GstAudioMeta</span></a> *
gst_buffer_add_audio_meta (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer</code></em>,
                           <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-GstAudio.html#GstAudioInfo"><span class="type">GstAudioInfo</span></a> *info</code></em>,
                           <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> samples</code></em>,
                           <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> offsets[]</code></em>);</pre>
<p>Allocates and attaches a <a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioMeta" title="struct GstAudioMeta"><span class="type">GstAudioMeta</span></a> on <em class="parameter"><code>buffer</code></em>
, which must be writable
for that purpose. The fields of the <a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioMeta" title="struct GstAudioMeta"><span class="type">GstAudioMeta</span></a> are directly populated
from the arguments of this function.</p>
<p>When <em class="parameter"><code>info-&gt;layout</code></em>
 is <a class="link" href="gst-plugins-base-libs-GstAudio.html#GST-AUDIO-LAYOUT-NON-INTERLEAVED:CAPS"><code class="literal">GST_AUDIO_LAYOUT_NON_INTERLEAVED</code></a> and <em class="parameter"><code>offsets</code></em>
 is
<a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, the offsets are calculated with a formula that assumes the planes are
tightly packed and in sequence:
offsets[channel] = channel * <em class="parameter"><code>samples</code></em>
 * sample_stride</p>
<p>It is not allowed for channels to overlap in memory,
i.e. for each i in [0, channels), the range
[<em class="parameter"><code>offsets</code></em>
[i], <em class="parameter"><code>offsets</code></em>
[i] + <em class="parameter"><code>samples</code></em>
 * sample_stride) must not overlap
with any other such range. This function will assert if the parameters
specified cause this restriction to be violated.</p>
<p>It is, obviously, also not allowed to specify parameters that would cause
out-of-bounds memory access on <em class="parameter"><code>buffer</code></em>
. This is also checked, which means
that you must add enough memory on the <em class="parameter"><code>buffer</code></em>
 before adding this meta.</p>
<div class="refsect3">
<a name="gst-buffer-add-audio-meta.parameters"></a><h4>Parameters</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
<col width="200px" class="parameters_annotations">
</colgroup>
<tbody>
<tr>
<td class="parameter_name"><p>buffer</p></td>
<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a></p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
<td class="parameter_name"><p>info</p></td>
<td class="parameter_description"><p>the audio properties of the buffer</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
<td class="parameter_name"><p>samples</p></td>
<td class="parameter_description"><p>the number of valid samples in the buffer</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
<td class="parameter_name"><p>offsets</p></td>
<td class="parameter_description"><p>the offsets (in bytes) where each channel plane starts
in the buffer or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to calculate it (see below); must be <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> also
when <em class="parameter"><code>info-&gt;layout</code></em>
is <a class="link" href="gst-plugins-base-libs-GstAudio.html#GST-AUDIO-LAYOUT-INTERLEAVED:CAPS"><code class="literal">GST_AUDIO_LAYOUT_INTERLEAVED</code></a>. </p></td>
<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
</tr>
</tbody>
</table></div>
</div>
<div class="refsect3">
<a name="gst-buffer-add-audio-meta.returns"></a><h4>Returns</h4>
<p>the <a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioMeta" title="struct GstAudioMeta"><span class="type">GstAudioMeta</span></a> that was attached on the <em class="parameter"><code>buffer</code></em>
. </p>
<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
</div>
<p class="since">Since: <a class="link" href="ix03.html#api-index-1.16">1.16</a></p>
</div>
<hr>
<div class="refsect2">
<a name="gst-buffer-get-audio-meta"></a><h3>gst_buffer_get_audio_meta()</h3>
<pre class="programlisting">#define             gst_buffer_get_audio_meta(b)</pre>
</div>
<hr>
<div class="refsect2">
<a name="gst-buffer-add-audio-downmix-meta"></a><h3>gst_buffer_add_audio_downmix_meta ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioDownmixMeta" title="struct GstAudioDownmixMeta"><span class="returnvalue">GstAudioDownmixMeta</span></a> *
gst_buffer_add_audio_downmix_meta (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer</code></em>,
                                   <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-Audio-channels.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> *from_position</code></em>,
                                   <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> from_channels</code></em>,
                                   <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-Audio-channels.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> *to_position</code></em>,
                                   <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> to_channels</code></em>,
                                   <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> **matrix</code></em>);</pre>
<p>Attaches <a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioDownmixMeta" title="struct GstAudioDownmixMeta"><span class="type">GstAudioDownmixMeta</span></a> metadata to <em class="parameter"><code>buffer</code></em>
 with the given parameters.</p>
<p><em class="parameter"><code>matrix</code></em>
 is an two-dimensional array of <em class="parameter"><code>to_channels</code></em>
 times <em class="parameter"><code>from_channels</code></em>

coefficients, i.e. the i-th output channels is constructed by multiplicating
the input channels with the coefficients in <em class="parameter"><code>matrix</code></em>
[i] and taking the sum
of the results.</p>
<div class="refsect3">
<a name="gst-buffer-add-audio-downmix-meta.parameters"></a><h4>Parameters</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
<col width="200px" class="parameters_annotations">
</colgroup>
<tbody>
<tr>
<td class="parameter_name"><p>buffer</p></td>
<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a></p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
<td class="parameter_name"><p>from_position</p></td>
<td class="parameter_description"><p>the channel positions
of the source. </p></td>
<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=from_channels]</span></td>
</tr>
<tr>
<td class="parameter_name"><p>from_channels</p></td>
<td class="parameter_description"><p>The number of channels of the source</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
<td class="parameter_name"><p>to_position</p></td>
<td class="parameter_description"><p>the channel positions of
the destination. </p></td>
<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=to_channels]</span></td>
</tr>
<tr>
<td class="parameter_name"><p>to_channels</p></td>
<td class="parameter_description"><p>The number of channels of the destination</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
<td class="parameter_name"><p>matrix</p></td>
<td class="parameter_description"><p>The matrix coefficients.</p></td>
<td class="parameter_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
<div class="refsect3">
<a name="gst-buffer-add-audio-downmix-meta.returns"></a><h4>Returns</h4>
<p>the <a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioDownmixMeta" title="struct GstAudioDownmixMeta"><span class="type">GstAudioDownmixMeta</span></a> on <em class="parameter"><code>buffer</code></em>
. </p>
<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-buffer-get-audio-downmix-meta"></a><h3>gst_buffer_get_audio_downmix_meta()</h3>
<pre class="programlisting">#define gst_buffer_get_audio_downmix_meta(b) ((GstAudioDownmixMeta*)gst_buffer_get_meta((b), GST_AUDIO_DOWNMIX_META_API_TYPE))
</pre>
</div>
<hr>
<div class="refsect2">
<a name="gst-buffer-get-audio-downmix-meta-for-channels"></a><h3>gst_buffer_get_audio_downmix_meta_for_channels ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioDownmixMeta" title="struct GstAudioDownmixMeta"><span class="returnvalue">GstAudioDownmixMeta</span></a> *
gst_buffer_get_audio_downmix_meta_for_channels
                               (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer</code></em>,
                                <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-Audio-channels.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> *to_position</code></em>,
                                <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> to_channels</code></em>);</pre>
<p>Find the <a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioDownmixMeta" title="struct GstAudioDownmixMeta"><span class="type">GstAudioDownmixMeta</span></a> on <em class="parameter"><code>buffer</code></em>
 for the given destination
channel positions.</p>
<div class="refsect3">
<a name="gst-buffer-get-audio-downmix-meta-for-channels.parameters"></a><h4>Parameters</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
<col width="200px" class="parameters_annotations">
</colgroup>
<tbody>
<tr>
<td class="parameter_name"><p>buffer</p></td>
<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a></p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
<td class="parameter_name"><p>to_position</p></td>
<td class="parameter_description"><p>the channel positions of
the destination. </p></td>
<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=to_channels]</span></td>
</tr>
<tr>
<td class="parameter_name"><p>to_channels</p></td>
<td class="parameter_description"><p>The number of channels of the destination</p></td>
<td class="parameter_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
<div class="refsect3">
<a name="gst-buffer-get-audio-downmix-meta-for-channels.returns"></a><h4>Returns</h4>
<p>the <a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioDownmixMeta" title="struct GstAudioDownmixMeta"><span class="type">GstAudioDownmixMeta</span></a> on <em class="parameter"><code>buffer</code></em>
. </p>
<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-buffer-add-audio-clipping-meta"></a><h3>gst_buffer_add_audio_clipping_meta ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioClippingMeta" title="struct GstAudioClippingMeta"><span class="returnvalue">GstAudioClippingMeta</span></a> *
gst_buffer_add_audio_clipping_meta (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer</code></em>,
                                    <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> format</code></em>,
                                    <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> start</code></em>,
                                    <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> end</code></em>);</pre>
<p>Attaches <a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioClippingMeta" title="struct GstAudioClippingMeta"><span class="type">GstAudioClippingMeta</span></a> metadata to <em class="parameter"><code>buffer</code></em>
 with the given parameters.</p>
<div class="refsect3">
<a name="gst-buffer-add-audio-clipping-meta.parameters"></a><h4>Parameters</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
<col width="200px" class="parameters_annotations">
</colgroup>
<tbody>
<tr>
<td class="parameter_name"><p>buffer</p></td>
<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a></p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
<td class="parameter_name"><p>format</p></td>
<td class="parameter_description"><p>GstFormat of <em class="parameter"><code>start</code></em>
and <em class="parameter"><code>stop</code></em>
, GST_FORMAT_DEFAULT is samples</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
<td class="parameter_name"><p>start</p></td>
<td class="parameter_description"><p>Amount of audio to clip from start of buffer</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
<td class="parameter_name"><p>end</p></td>
<td class="parameter_description"><p>Amount of  to clip from end of buffer</p></td>
<td class="parameter_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
<div class="refsect3">
<a name="gst-buffer-add-audio-clipping-meta.returns"></a><h4>Returns</h4>
<p>the <a class="link" href="gst-plugins-base-libs-GstAudio-meta.html#GstAudioClippingMeta" title="struct GstAudioClippingMeta"><span class="type">GstAudioClippingMeta</span></a> on <em class="parameter"><code>buffer</code></em>
. </p>
<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
</div>
<p class="since">Since: <a class="link" href="ix08.html#api-index-1.8">1.8</a></p>
</div>
<hr>
<div class="refsect2">
<a name="gst-buffer-get-audio-clipping-meta"></a><h3>gst_buffer_get_audio_clipping_meta()</h3>
<pre class="programlisting">#define gst_buffer_get_audio_clipping_meta(b) ((GstAudioClippingMeta*)gst_buffer_get_meta((b), GST_AUDIO_CLIPPING_META_API_TYPE))
</pre>
</div>
</div>
<div class="refsect1">
<a name="gst-plugins-base-libs-GstAudio-meta.other_details"></a><h2>Types and Values</h2>
<div class="refsect2">
<a name="GstAudioMeta"></a><h3>struct GstAudioMeta</h3>
<pre class="programlisting">struct GstAudioMeta {
  GstMeta      meta;

  GstAudioInfo info;
  gsize        samples;
  gsize        *offsets;
};
</pre>
<p>Buffer metadata describing how data is laid out inside the buffer. This
is useful for non-interleaved (planar) buffers, where it is necessary to
have a place to store where each plane starts and how long each plane is.</p>
<p>It is a requirement for non-interleaved buffers to have this metadata
attached and to be mapped with <a class="link" href="gst-plugins-base-libs-GstAudio.html#gst-audio-buffer-map" title="gst_audio_buffer_map ()"><code class="function">gst_audio_buffer_map()</code></a> in order to ensure
correct handling of clipping and channel reordering.</p>
<p>The different channels in <em class="parameter"><code>offsets</code></em>
 are always in the GStreamer channel order.
Zero-copy channel reordering can be implemented by swapping the values in
<em class="parameter"><code>offsets</code></em>
.</p>
<p>It is not allowed for channels to overlap in memory,
i.e. for each i in [0, channels), the range
[<em class="parameter"><code>offsets</code></em>
[i], <em class="parameter"><code>offsets</code></em>
[i] + <em class="parameter"><code>samples</code></em>
 * sample_stride) must not overlap
with any other such range.</p>
<p>It is, however, allowed to have parts of the buffer memory unused,
by using <em class="parameter"><code>offsets</code></em>
 and <em class="parameter"><code>samples</code></em>
 in such a way that leave gaps on it.
This is used to implement zero-copy clipping in non-interleaved buffers.</p>
<p>Obviously, due to the above, it is not safe to infer the
number of valid samples from the size of the buffer. You should always
use the <em class="parameter"><code>samples</code></em>
 variable of this metadata.</p>
<p>Note that for interleaved audio it is not a requirement to have this
metadata attached and at the moment of writing, there is actually no use
case to do so. It is, however, allowed to attach it, for some potential
future use case.</p>
<div class="refsect3">
<a name="GstAudioMeta.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
<col width="200px" class="struct_members_annotations">
</colgroup>
<tbody>
<tr>
<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstMeta.html#GstMeta"><span class="type">GstMeta</span></a> <em class="structfield"><code><a name="GstAudioMeta.meta"></a>meta</code></em>;</p></td>
<td class="struct_member_description"><p>parent <a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstMeta.html#GstMeta"><span class="type">GstMeta</span></a></p></td>
<td class="struct_member_annotations"> </td>
</tr>
<tr>
<td class="struct_member_name"><p><a class="link" href="gst-plugins-base-libs-GstAudio.html#GstAudioInfo"><span class="type">GstAudioInfo</span></a> <em class="structfield"><code><a name="GstAudioMeta.info"></a>info</code></em>;</p></td>
<td class="struct_member_description"><p>the audio properties of the buffer</p></td>
<td class="struct_member_annotations"> </td>
</tr>
<tr>
<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> <em class="structfield"><code><a name="GstAudioMeta.samples"></a>samples</code></em>;</p></td>
<td class="struct_member_description"><p>the number of valid samples in the buffer</p></td>
<td class="struct_member_annotations"> </td>
</tr>
<tr>
<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> *<em class="structfield"><code><a name="GstAudioMeta.offsets"></a>offsets</code></em>;</p></td>
<td class="struct_member_description"><p>the offsets (in bytes) where each channel plane starts in the
buffer or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the buffer has interleaved layout; if not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, this
is guaranteed to be an array of <em class="parameter"><code>info.channels</code></em>
elements</p></td>
<td class="struct_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
<p class="since">Since: <a class="link" href="ix03.html#api-index-1.16">1.16</a></p>
</div>
<hr>
<div class="refsect2">
<a name="GstAudioDownmixMeta"></a><h3>struct GstAudioDownmixMeta</h3>
<pre class="programlisting">struct GstAudioDownmixMeta {
  GstMeta      meta;

  GstAudioChannelPosition *from_position;
  GstAudioChannelPosition *to_position;
  gint        from_channels, to_channels;
  gfloat       **matrix;
};
</pre>
<p>Extra buffer metadata describing audio downmixing matrix. This metadata is
attached to audio buffers and contains a matrix to downmix the buffer number
of channels to <em class="parameter"><code>channels</code></em>
.</p>
<p><em class="parameter"><code>matrix</code></em>
 is an two-dimensional array of <em class="parameter"><code>to_channels</code></em>
 times <em class="parameter"><code>from_channels</code></em>

coefficients, i.e. the i-th output channels is constructed by multiplicating
the input channels with the coefficients in <em class="parameter"><code>matrix</code></em>
[i] and taking the sum
of the results.</p>
<div class="refsect3">
<a name="GstAudioDownmixMeta.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
<col width="200px" class="struct_members_annotations">
</colgroup>
<tbody>
<tr>
<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstMeta.html#GstMeta"><span class="type">GstMeta</span></a> <em class="structfield"><code><a name="GstAudioDownmixMeta.meta"></a>meta</code></em>;</p></td>
<td class="struct_member_description"><p>parent <a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstMeta.html#GstMeta"><span class="type">GstMeta</span></a></p></td>
<td class="struct_member_annotations"> </td>
</tr>
<tr>
<td class="struct_member_name"><p><a class="link" href="gst-plugins-base-libs-Audio-channels.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> *<em class="structfield"><code><a name="GstAudioDownmixMeta.from-position"></a>from_position</code></em>;</p></td>
<td class="struct_member_description"><p>the channel positions of the source</p></td>
<td class="struct_member_annotations"> </td>
</tr>
<tr>
<td class="struct_member_name"><p><a class="link" href="gst-plugins-base-libs-Audio-channels.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> *<em class="structfield"><code><a name="GstAudioDownmixMeta.to-position"></a>to_position</code></em>;</p></td>
<td class="struct_member_description"><p>the channel positions of the destination</p></td>
<td class="struct_member_annotations"> </td>
</tr>
<tr>
<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstAudioDownmixMeta.from-channels"></a>from_channels</code></em>;</p></td>
<td class="struct_member_description"><p>the number of channels of the source</p></td>
<td class="struct_member_annotations"> </td>
</tr>
<tr>
<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstAudioDownmixMeta.to-channels"></a>to_channels</code></em>;</p></td>
<td class="struct_member_description"><p>the number of channels of the destination</p></td>
<td class="struct_member_annotations"> </td>
</tr>
<tr>
<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> **<em class="structfield"><code><a name="GstAudioDownmixMeta.matrix"></a>matrix</code></em>;</p></td>
<td class="struct_member_description"><p>the matrix coefficients.</p></td>
<td class="struct_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
</div>
<hr>
<div class="refsect2">
<a name="GstAudioClippingMeta"></a><h3>struct GstAudioClippingMeta</h3>
<pre class="programlisting">struct GstAudioClippingMeta {
  GstMeta   meta;

  GstFormat format;
  guint64   start;
  guint64   end;
};
</pre>
<p>Extra buffer metadata describing how much audio has to be clipped from
the start or end of a buffer. This is used for compressed formats, where
the first frame usually has some additional samples due to encoder and
decoder delays, and the last frame usually has some additional samples to
be able to fill the complete last frame.</p>
<p>This is used to ensure that decoded data in the end has the same amount of
samples, and multiply decoded streams can be gaplessly concatenated.</p>
<p>Note: If clipping of the start is done by adjusting the segment, this meta
has to be dropped from buffers as otherwise clipping could happen twice.</p>
<div class="refsect3">
<a name="GstAudioClippingMeta.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
<col width="200px" class="struct_members_annotations">
</colgroup>
<tbody>
<tr>
<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstMeta.html#GstMeta"><span class="type">GstMeta</span></a> <em class="structfield"><code><a name="GstAudioClippingMeta.meta"></a>meta</code></em>;</p></td>
<td class="struct_member_description"><p>parent <a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstMeta.html#GstMeta"><span class="type">GstMeta</span></a></p></td>
<td class="struct_member_annotations"> </td>
</tr>
<tr>
<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> <em class="structfield"><code><a name="GstAudioClippingMeta.format"></a>format</code></em>;</p></td>
<td class="struct_member_description"><p>GstFormat of <em class="parameter"><code>start</code></em>
and <em class="parameter"><code>stop</code></em>
, GST_FORMAT_DEFAULT is samples</p></td>
<td class="struct_member_annotations"> </td>
</tr>
<tr>
<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> <em class="structfield"><code><a name="GstAudioClippingMeta.start"></a>start</code></em>;</p></td>
<td class="struct_member_description"><p>Amount of audio to clip from start of buffer</p></td>
<td class="struct_member_annotations"> </td>
</tr>
<tr>
<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> <em class="structfield"><code><a name="GstAudioClippingMeta.end"></a>end</code></em>;</p></td>
<td class="struct_member_description"><p>Amount of  to clip from end of buffer</p></td>
<td class="struct_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
<p class="since">Since: <a class="link" href="ix08.html#api-index-1.8">1.8</a></p>
</div>
</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.28</div>
</body>
</html>